
// 类数组
function foo(name, age, sex) {
    console.log(arguments);//[Arguments] { '0': 'jack', '1': '18', '2': 'male' }
    console.log(typeof arguments);//object
    console.log(Object.prototype.toString.call(arguments));//[object Arguments]
    console.log(arguments.length)//3
}
foo('jack', '18', 'male');


// 遍历参数操作
function add() {
    var sum = 0,
        len = arguments.length;
    for (var i = 0; i < len; i++) {
        sum += arguments[i];
    }
    return sum;
}
add()                           // 0
add(1)                          // 1
add(1, 2, 3, 4);                   // 10



// 定义链接字符串函数
// 我们可以通过 arguments 这个例子定义一个函数来连接字符串。
// 这个函数唯一正式声明了的参数是一个字符串，该参数指定一个字符作为衔接点来连接字符串。该函数定义如下。
function myConcat(separa) {
    var args = Array.prototype.slice.call(arguments, 1);
    return args.join(separa);
}
myConcat(", ", "red", "orange", "blue");
// "red, orange, blue"
myConcat("; ", "elephant", "lion", "snake");
// "elephant; lion; snake"
myConcat(". ", "one", "two", "three", "four", "five");
// "one. two. three. four. five"


function superClass() {
    this.a = 1;
    this.print = function () {
        console.log(this.a);
    }
}

function subClass() {
    superClass.call(this);//改变了this的指向，相当于继承了superClass的变量和方法
    this.print();
}

subClass();
// 1

// 获取数组中最大项和最小项
let array = [3, 1, 2, 32, 21, 43, 25]
let max = Math.max.apply(null, array);
let min = Math.min.apply(null, array);
console.log(max, min)